import dayjs from 'dayjs';

/**
 * 通过传入年月获取对应月份的起止时间
 * @param dateStr YYYY-MM 的日期格式，如2024-06,不传默认当月
 */
export function getMonthStartAndEnd(dateStr?: string) {
  if (!dateStr) {
    dateStr = dayjs().format('YYYY-MM');
  }

  // 验证输入格式是否正确
  const regex = /^\d{4}-\d{2}$/;
  if (!regex.test(dateStr)) {
    throw new Error('日期字符串格式不正确，应为 YYYY-MM');
  }

  // 使用 split 方法分割字符串
  const [year, month] = dateStr.split('-').map(Number);

  // 获取指定月份的第一天
  const firstDayOfMonth = dayjs(new Date(year, month - 1, 1))
    .startOf('month')
    .format('YYYY-MM-DD');

  // 获取指定月份的最后一天
  const lastDayOfMonth = dayjs(new Date(year, month - 1, 1))
    .endOf('month')
    .format('YYYY-MM-DD');

  return [firstDayOfMonth, lastDayOfMonth];
}

export function shortcuts(params?: any) {
  return {
    当前月: () => {
      const now = dayjs().valueOf();
      return [
        dayjs(now).startOf('month').valueOf(),
        dayjs(now).endOf('month').valueOf(),
      ] as const;
    },
    最近一周: () => {
      const now = dayjs().valueOf();
      return [dayjs(now).subtract(7, 'day').valueOf(), now] as const;
    },
    最近一个月: () => {
      const now = dayjs().valueOf();
      return [dayjs(now).subtract(1, 'month').valueOf(), now] as const;
    },
    最近三个月: () => {
      const now = dayjs().valueOf();
      return [dayjs(now).subtract(3, 'month').valueOf(), now] as const;
    },
    最近半年: () => {
      const now = dayjs().valueOf();
      return [dayjs(now).subtract(6, 'month').valueOf(), now] as const;
    },
    最近一年: () => {
      const now = dayjs().valueOf();
      return [dayjs(now).subtract(1, 'year').valueOf(), now] as const;
    },
    当前年: () => {
      const now = dayjs().valueOf();
      return [dayjs(now).startOf('year').valueOf(), now] as const;
    },
  };
}
